In the domain of computer languages, there have traditionally been many disparate languages classes. For example, many programming languages aim to provide general solutions for most end-user programming goals, while on the other hand query languages are often devoted to information mining based upon queries to databases. For years there have been many attempts to add query capabilities to programming languages, but numerous difficulties exist.
One such difficulty is that most modern programming languages are based upon an object-oriented model that allows for hierarchy, abstractions, modularity, encapsulation, and several other paradigms intended to reduce the complexity of programming tasks. On the other hand, modern databases are largely relational databases, so query languages tend to be based upon relational models rather than object-oriented models.
Another difficulty is that development environments for programming languages (e.g., Integrated Development Environments (IDE)) have evolved to provide very sophisticated means of assistance to developers such that it has become arduous to program without them. One example is in-line context information such as autocompletion utilities or mechanisms. These autocompletion mechanisms work well in the object-oriented world where classes, variable names, and other constructs are defined in advance, but are often unavailable for query languages because type-checking of element types necessary for autocompletion is not available until the query has been compiled or translated. Further, the query cannot be translated until the query is complete, rendering an autocompletion mechanism moot. Further still, if the query expression is malformed, compilation errors can be arcane and difficult to remedy.